import Vue from 'vue'
import Router from 'vue-router'
import store from '../store'
import { MessageBox, Message } from "element-ui";
Vue.use(Router)

/* Layout */
import Layout from '@/layout'

/* Router Modules */
// import componentsRouter from './modules/components'
// import chartsRouter from './modules/charts'
import deviceRouter from './modules/device'
import systemRouter from './modules/system'
// import nestedRouter from './modules/nested'
// import plantRouter from './modules/plantCheck'
// import repairRouter from './modules/repair'
// import preserveRouter from './modules/preserve'
// import verificationRouter from './modules/verification'
// import supplyRouter from './modules/supply'
// import dataIndentifyRouter from './modules/dataIdentify'
//模拟存储权限数据到本地

localStorage.setItem("buttonGroups", JSON.stringify({
        "/": [{
            name: "启用",
            btnType: "using",
            cssType: "default",
            location: "table",
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "停用",
            btnType: "useless",
            cssType: "default",
            location: "table",
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "编辑",
            btnType: "edit",
            cssType: "default",
            location: "table",
            method: () => {
                console.log("编辑")
            },
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "删除",
            btnType: "delete",
            cssType: "default",
            location: "table",
            method: () => {
                console.log("新增")
            },
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "查询",
            btnType: "search",
            cssType: "default",
            location: "1",
            method: () => {
                console.log("新增")
            },
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "重置",
            btnType: "reset",
            cssType: "default",
            location: "1",
            method: () => {
                console.log("新增")
            },
            showInpage: 1 //第一级页面显示该按钮
        }, {
            name: "详情",
            btnType: "detail",
            cssType: "default",
            location: "table",
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "新建",
            btnType: "add",
            cssType: "primary",
            location: "2",
            method: () => {
                console.log("添加")
            },
            showInpage: 2 //第一级页面显示该按钮
        }, {
            name: "批量导入",
            btnType: "import",
            cssType: "default",
            location: "2",
            method: () => {
                console.log("下载")
            },
            showInpage: 1 //第一级页面显示该按钮
        }, {
            name: "下载导入模板",
            btnType: "downloadTemplete",
            cssType: "default",
            location: "2",
            method: () => {
                console.log("下载")
            },
            showInpage: 1 //第一级页面显示该按钮
        }, {
            name: "批量导出",
            btnType: "export",
            cssType: "default",
            location: "2",
            method: () => {
                console.log("下载")
            },
            showInpage: 1 //第一级页面显示该按钮
        }, {
            name: "下载设备标识卡",
            btnType: "downloadIdentify",
            cssType: "default",
            location: "2",
            method: () => {
                console.log("下载")
            },
            showInpage: 1 //第一级页面显示该按钮
        }]
    }))
    /**
     * Note: sub-menu only appear when route children.length >= 1
     * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
     *
     * hidden: true                   if set true, item will not show in the sidebar(default is false)
     * alwaysShow: true               if set true, will always show the root menu
     *                                if not set alwaysShow, when item has more than one children route,
     *                                it will becomes nested mode, otherwise not show the root menu
     * redirect: noredirect           if `redirect:noredirect` will no redirect in the breadcrumb
     * name:'router-name'             the name is used by <keep-alive> (must set!!!)
     * meta : {
        roles: ['admin','editor']    control the page roles (you can set multiple roles)
        title: 'title'               the name show in sidebar and breadcrumb (recommend set)
        icon: 'svg-name'             the icon show in the sidebar
        noCache: true                if set true, the page will no be cached(default is false)
        affix: true                  if set true, the tag will affix in the tags-view
        breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
        activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
      }
     */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [{
        path: '/redirect',
        component: Layout,
        hidden: true,
        children: [{
            path: '/redirect/:path*',
            component: () =>
                import ('@/views/redirect/index')
        }]
    },
    {
        path: '/login',
        component: () =>
            import ('@/views/login/index'),
        hidden: true
    },
    {
        path: '/403',
        component: () =>
            import ('@/views/error-page/403'),
        hidden: true
    },
    {
        path: '/404',
        component: () =>
            import ('@/views/error-page/404'),
        hidden: true
    },
    {
        path: '/401',
        component: () =>
            import ('@/views/error-page/401'),
        hidden: true
    },
    {
        path: '/',
        component: Layout,
        redirect: '/dashboard/index',
        hidden: true
    },
    // {
    //     path: '/documentation',
    //     component: Layout,
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/documentation/index'),
    //         name: 'Documentation',
    //         meta: { title: 'documentation', icon: 'documentation', affix: true }
    //     }]
    // },
    // {
    //   path: '/guide',
    //   component: Layout,
    //   redirect: '/guide/index',
    //   children: [
    //     {
    //       path: 'index',
    //       component: () => import('@/views/guide/index'),
    //       name: 'Guide',
    //       meta: { title: 'guide', icon: 'guide', noCache: true }
    //     }
    //   ]
    // }
]

/**
 * asyncRoutes
 * the routes that need to be dynamically loaded based on user roles
 */
export const asyncRoutes = [
    //  {
    //         path: '/permission',
    //         component: Layout,
    //         redirect: '/permission/page',
    //         alwaysShow: true, // will always show the root menu
    //         name: 'Permission',
    //         meta: {
    //             title: 'permission',
    //             icon: 'lock',
    //             roles: ['admin', 'editor'] // you can set roles in root nav
    //         },
    //         children: [{
    //                 path: 'page',
    //                 component: () =>
    //                     import ('@/views/permission/page'),
    //                 name: 'PagePermission',
    //                 meta: {
    //                     title: 'pagePermission',
    //                     roles: ['admin'] // or you can only set roles in sub nav
    //                 }
    //             },
    //             {
    //                 path: 'directive',
    //                 component: () =>
    //                     import ('@/views/permission/directive'),
    //                 name: 'DirectivePermission',
    //                 meta: {
    //                     title: 'directivePermission'
    //                         // if do not set roles, means: this page does not require permission
    //                 }
    //             },
    //         {
    //             path: 'role',
    //             component: () =>
    //                 import ('@/views/permission/role'),
    //             name: 'RolePermission',
    //             meta: {
    //                 title: 'rolePermission',
    //                 roles: ['admin']
    //             }
    //         }
    //     ]
    // },

    // {
    //     path: '/icon',
    //     component: Layout,
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/svg-icons/index'),
    //         name: 'Icons',
    //         meta: { title: 'icons', icon: 'icon', noCache: true }
    //     }]
    // },

    /** when your routing map is too long, you can split it into small modules **/
    //componentsRouter,
    //chartsRouter,
    //nestedRouter,
    deviceRouter,
    //plantRouter,
    //repairRouter,
    systemRouter,
    //preserveRouter,
    // verificationRouter,
    // supplyRouter,
    //dataIndentifyRouter,
    // {
    //     path: '/example',
    //     component: Layout,
    //     hidden: true,
    //     redirect: '/example/list',
    //     name: 'Example',
    //     meta: {
    //         title: 'example',
    //         icon: 'example'
    //     },
    //     children: [{
    //             path: 'create',
    //             component: () =>
    //                 import ('@/views/example/create'),
    //             name: 'CreateArticle',
    //             meta: { title: 'createArticle', icon: 'edit' }
    //         },
    //         {
    //             path: 'edit/:id(\\d+)',
    //             component: () =>
    //                 import ('@/views/example/edit'),
    //             name: 'EditArticle',
    //             meta: { title: 'editArticle', noCache: true, activeMenu: '/example/list' },
    //             hidden: true
    //         },
    //         {
    //             path: 'list',
    //             component: () =>
    //                 import ('@/views/example/list'),
    //             name: 'ArticleList',
    //             meta: { title: 'articleList', icon: 'list' }
    //         }
    //     ]
    // },

    // {
    //     path: '/tab',
    //     component: Layout,
    //     hidden: true,
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/tab/index'),
    //         name: 'Tab',
    //         meta: { title: 'tab', icon: 'tab' }
    //     }]
    // },

    // {
    //     path: '/error',
    //     component: Layout,
    //     redirect: 'noredirect',
    //     name: 'ErrorPages',
    //     meta: {
    //         title: 'errorPages',
    //         icon: '404'
    //     },
    //     children: [{
    //             path: '401',
    //             component: () =>
    //                 import ('@/views/error-page/401'),
    //             name: 'Page401',
    //             meta: { title: 'page401', noCache: true }
    //         },
    //         {
    //             path: '404',
    //             component: () =>
    //                 import ('@/views/error-page/404'),
    //             name: 'Page404',
    //             meta: { title: 'page404', noCache: true }
    //         }
    //     ]
    // },

    // {
    //     path: '/error-log',
    //     component: Layout,
    //     redirect: 'noredirect',
    //     children: [{
    //         path: 'log',
    //         component: () =>
    //             import ('@/views/error-log/index'),
    //         name: 'ErrorLog',
    //         meta: { title: 'errorLog', icon: 'bug' }
    //     }]
    // },

    // {
    //     path: '/excel',
    //     component: Layout,
    //     redirect: '/excel/export-excel',
    //     name: 'Excel',
    //     meta: {
    //         title: 'excel',
    //         icon: 'excel'
    //     },
    //     children: [{
    //             path: 'export-excel',
    //             component: () =>
    //                 import ('@/views/excel/export-excel'),
    //             name: 'ExportExcel',
    //             meta: { title: 'exportExcel' }
    //         },
    //         {
    //             path: 'export-selected-excel',
    //             component: () =>
    //                 import ('@/views/excel/select-excel'),
    //             name: 'SelectExcel',
    //             meta: { title: 'selectExcel' }
    //         },
    //         {
    //             path: 'export-merge-header',
    //             component: () =>
    //                 import ('@/views/excel/merge-header'),
    //             name: 'MergeHeader',
    //             meta: { title: 'mergeHeader' }
    //         },
    //         {
    //             path: 'upload-excel',
    //             component: () =>
    //                 import ('@/views/excel/upload-excel'),
    //             name: 'UploadExcel',
    //             meta: { title: 'uploadExcel' }
    //         }
    //     ]
    // },

    // {
    //     path: '/zip',
    //     component: Layout,
    //     redirect: '/zip/download',
    //     alwaysShow: true,
    //     name: 'Zip',
    //     meta: { title: 'zip', icon: 'zip' },
    //     children: [{
    //         path: 'download',
    //         component: () =>
    //             import ('@/views/zip/index'),
    //         name: 'ExportZip',
    //         meta: { title: 'exportZip' }
    //     }]
    // },

    // {
    //     path: '/pdf',
    //     component: Layout,
    //     redirect: '/pdf/index',
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/pdf/index'),
    //         name: 'PDF',
    //         meta: { title: 'pdf', icon: 'pdf' }
    //     }]
    // },
    // {
    //     path: '/pdf/download',
    //     component: () =>
    //         import ('@/views/pdf/download'),
    //     hidden: true
    // },

    // {
    //     path: '/theme',
    //     component: Layout,
    //     redirect: 'noredirect',
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/theme/index'),
    //         name: 'Theme',
    //         meta: { title: 'theme', icon: 'theme' }
    //     }]
    // },

    // {
    //     path: '/clipboard',
    //     component: Layout,
    //     redirect: 'noredirect',
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/clipboard/index'),
    //         name: 'ClipboardDemo',
    //         meta: { title: 'clipboardDemo', icon: 'clipboard' }
    //     }]
    // },

    // {
    //     path: '/i18n',
    //     component: Layout,
    //     children: [{
    //         path: 'index',
    //         component: () =>
    //             import ('@/views/i18n-demo/index'),
    //         name: 'I18n',
    //         meta: { title: 'i18n', icon: 'international' }
    //     }]
    // },

    // {
    //     path: 'external-link',
    //     component: Layout,
    //     children: [{
    //         path: 'https://github.com/PanJiaChen/vue-element-admin',
    //         meta: { title: 'externalLink', icon: 'link' }
    //     }]
    // },  

    { path: '*', redirect: '/404', hidden: true }
]

const createRouter = () => new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes
})

const router = createRouter()
router.beforeEach((to, from, next) => {

        if (store.state.tagsView.visitedViews.length < 10) {
            if (to.fullPath.split("?")[0] != "/login") {
                //退出登录不再请求
                //初始加载一次所有的码值code,若vuex存在则取缓存   
                store.dispatch("app/getCodeList", ["assetType", "department"]); //code转码 部门,资产类型,职位
                store.dispatch("app/updateAllUser"); //人员信息
                store.dispatch("app/updateAllDuty"); //职位信息

                //这里做一层全局的路由拦截，在路由跳转时更新对应菜单的按钮权限,后面要根据路由匹配，先这么写
                let nextButtonsGroups = JSON.parse(localStorage.getItem("buttonGroups"))
                if (to.fullPath == "/dashboard/index") {
                    // if (store.state.permission.routes[0]) {
                    //     console.log("默认配置第一个菜单", store.state.permission.addRoutes[0].children[0].path)
                    //         //next(store.state.permission.addRoutes[0].children[0].path)

                    //     if (store.state.permission.addRoutes[0].children[0].path == "/dashboard/index") {
                    //         //存在工作台权限
                    //     } else {
                    //         //不存在工作台时,默认第一个路径
                    //         router.push(store.state.permission.addRoutes[0].children[0].path)
                    //     }
                    // }
                    store.dispatch('button/setCurrentAllButtons', nextButtonsGroups)

                } else if (to.fullPath == "/403") {

                } else {
                    store.dispatch('button/requestButtons', { path: to.fullPath }).then(() => {
                        // this.$emit('change')
                        console.log(store.state)
                    })

                }
            }

            next()
        } else {
            Message({
                message: "子页面已达上限，请先关闭无用子页面",
                type: "error",
                duration: 3 * 1000
            })
        }

    })
    // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
    const newRouter = createRouter()
    router.matcher = newRouter.matcher // reset router
}

export default router